<?php

//error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
//ini_set('display_errors','On');

use Doctrine\Common\Collections\ArrayCollection;

class Juicios_ListadosController extends Zend_Controller_Action {

    private $clienteDao;
    private $creditoDao;
    private $promesasDao;
    private $referenciaDao;
    private $fullPath;
    private $personaDao;
    private $usuarioDao;
    private $estadoJuicioDao;
    private $juicioDao;

    public function init() {
        $auth = Zend_Auth::getInstance();

        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }

        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6', '8fbaef'), //azul
            'd6d65b' => array('d6d65b', 'bfbf3f'), //amarillo
            '51ad56' => array('51ad56', '73be78'), //verde
            'db6f70' => array('db6f70', 'e59899'), //rojo
            '5e71a0' => array('5e71a0', '8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b', 'e8a97c'), //naranja
            '92989f' => array('92989f', 'bbbec3')); //gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */

        $this->currencyFormat = iconv('Windows-1252', 'utf-8', '#,#0.00##\ $;[Red]-#,#0.00##\ $');

        $this->fullPath = $_SERVER["DOCUMENT_ROOT"];
        $this->pathUpload = 'financiera/adjuntos/';

        $this->usuarioDao = new Doctrine_Model_UsuarioDoctrineDao();
        $this->personaDao = new Doctrine_Model_PersonaDao();
        $this->creditoDao = new Doctrine_Model_CreditoDao();
        $this->promesasDao = new Doctrine_Model_PromesasDao();
        $this->referenciaDao = new Doctrine_Model_Referencias();
        $this->estadoJuicioDao = new Doctrine_Model_EstadoJuicioDao();
        $this->juicioDao = new Doctrine_Model_JuicioDao();

        $this->view->titulo = "Listados";
    }

    public function indexAction() {
        
    }

    public function juiciosAction() {
        set_time_limit(0);
        
        $common = new Doctrine_Model_Common();
        $this->view->common = $common;
        
        ini_set("memory_limit", "512M");
        
        $desde = $this->getRequest()->getParam('desde', date('d/m/Y'));
        $hasta = $this->getRequest()->getParam('hasta', date('d/m/Y'));
        $this->view->desde = $desde;
        $this->view->hasta = $hasta;
        
        $usuarioAsignado = $this->getRequest()->getParam('usuario_asignado', 0);
        $abogado = $this->getRequest()->getParam('abogado', 0);
        $juzgado = $this->getRequest()->getParam('juzgado', 0);
        $juicio_estado = $this->getRequest()->getParam('juicio_estado', 0);
        $oficio_embargo = $this->getRequest()->getParam('oficio_embargo', 'todos');
        $sentencia = $this->getRequest()->getParam('sentencia', 'todos');
        $pendiente_cobro = $this->getRequest()->getParam('pendiente_cobro', 'todos');
        $pedir_saldo = $this->getRequest()->getParam('pedir_saldo', 'todos');
        
        $cantidad_juicios = 0;
        $juicios = array();
        
        if ($this->getRequest()->isPost()) {
            if (!empty($desde) && !empty($hasta)) {

                $desdeArray = explode('/', $desde);
                $hastaArray = explode('/', $hasta);
                $fechaDesde = $desdeArray[2] . '-' . $desdeArray[1] . '-' . $desdeArray[0];
                $fechaHasta = $hastaArray[2] . '-' . $hastaArray[1] . '-' . $hastaArray[0];

                $this->juiciosDao = new Doctrine_Model_JuicioDao();
                $juicios = $this->juiciosDao->obtenerEntreFechas($fechaDesde, $fechaHasta);
                $juicios = $this->juiciosDao->toArrayCollection($juicios);

                $juicio = new Doctrine_Model_Entities_Juicio();
                if ($abogado != 0) {
                    foreach ($juicios as $juicio) {
                        if ($juicio->getAbogado() != $abogado) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                if ($juzgado > 0 && $juzgado != "") {
                    foreach ($juicios as $juicio) {
                        if ($juicio->getJuzgado() != $juzgado) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                if ($usuarioAsignado != 0) {
                    foreach ($juicios as $juicio) {
                        if (!is_null($juicio->getUsuarioACargo())):
                            if ($juicio->getUsuarioACargo() && $juicio->getUsuarioACargo()->getId() != $usuarioAsignado):
                                $juicios->removeElement($juicio);
                            endif;
                        else:
                            $juicios->removeElement($juicio);
                        endif;
                    }
                }

                if ($juicio_estado != 0) {
                    foreach ($juicios as $juicio) {
                        if ($juicio->getEstadoJuicio() && $juicio->getEstadoJuicio()->getId() != $juicio_estado) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                if ($oficio_embargo != 'todos') {
                    foreach ($juicios as $juicio) {
                        if ($juicio->getOficioEmbargo() != $oficio_embargo) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                if ($sentencia != 'todos') {
                    foreach ($juicios as $juicio) {
                        if ($juicio->getSentencia() != $sentencia) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }

                if ($pendiente_cobro != 'todos') {
                    foreach ($juicios as $juicio) {
                        $this->promesasJuiciosDao = new Doctrine_Model_PromesaJuicioDao();
                        $promesas = $this->promesasJuiciosDao->obtenerPorJuicioIdYPendienteDeCobro($juicio->getId());

                        if ($pendiente_cobro == 1 && count($promesas) == 0) {
                            $juicios->removeElement($juicio);
                        }
                        if ($pendiente_cobro == 0 && count($promesas) > 0) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                if ($pedir_saldo != 'todos') {
                    foreach ($juicios as $juicio) {
                        $this->promesasJuiciosDao = new Doctrine_Model_PromesaJuicioDao();
                        $promesas = $this->promesasJuiciosDao->obtenerPorJuicioIdYPedirSaldo($juicio->getId());

                        if ($pedir_saldo == 1 && count($promesas) == 0) {
                            $juicios->removeElement($juicio);
                        }
                        if ($pedir_saldo == 0 && count($promesas) > 0) {
                            $juicios->removeElement($juicio);
                        }
                    }
                }
                $cantidad_juicios = count($juicios);
            }
        }
        
        $usuarios = $this->usuarioDao->obtenerTodos();
        $this->view->estados_juicios = $this->estadoJuicioDao->obtenerTodos();

        $abogados = array(array("id" => 1, "nombre" => "Lucas"), array("id" => 2, "nombre" => "Gabriela"), array("id" => 3, "nombre" => "Eugenia"));
        $this->view->usuarios = $usuarios;
        $this->view->abogados = $abogados;
        $this->view->juzgado = $juzgado;
        $this->view->cantidad_juicios = $cantidad_juicios;
        $this->view->juicios = $juicios;
        $this->view->abogado = $abogado;
        $this->view->usuarioAsignado = $usuarioAsignado;
        $this->view->juicio_estado = $juicio_estado;
        $this->view->oficio_embargo = $oficio_embargo;
        $this->view->sentencia = $sentencia;
        $this->view->pendiente_cobro = $pendiente_cobro;
        $this->view->pedir_saldo = $pedir_saldo;
    }

    public function promesasAction() {
        set_time_limit(0);
        $promesas = new ArrayCollection();
        ini_set("memory_limit", "512M");
        $desde = $this->getRequest()->getParam('desde', date('d/m/Y'));
        $hasta = $this->getRequest()->getParam('hasta', date('d/m/Y'));
        $this->view->desde = $desde;
        $this->view->hasta = $hasta;
        
        $usuarioAsignado = $this->getRequest()->getParam('usuario_asignado', 0);
        
        $pendienteDeCobro = $this->getRequest()->getParam('pendiente_de_cobro', '0');
        
        $cantidad_promesas = 0;
        if ($this->getRequest()->isPost()) {
            if (!empty($desde) && !empty($hasta)) {

                $desdeArray = explode('/', $desde);
                $hastaArray = explode('/', $hasta);
                $fechaDesde = $desdeArray[2] . '-' . $desdeArray[1] . '-' . $desdeArray[0];
                $fechaHasta = $hastaArray[2] . '-' . $hastaArray[1] . '-' . $hastaArray[0];

                $this->juiciosDao = new Doctrine_Model_JuicioDao();
                $juicios = $this->juiciosDao->obtenerTodos();
                $juicios = $this->juiciosDao->toArrayCollection($juicios);
                $promesas = new ArrayCollection();
                foreach ($juicios as $juicio) {
                    $promesa = $juicio->obtenerUltimaPromesa();
                    if ($promesa && $promesa->getFechaPromesa()->format('Y-m-d') >= $fechaDesde && $promesa->getFechaPromesa()->format('Y-m-d') <= $fechaHasta) {
                        $promesas->add($promesa);
                    }
                }
                $iterator = $promesas->getIterator();
                $iterator->uasort(function ($a, $b) {
                    return ($a->getFechaPromesa() < $b->getFechaPromesa()) ? -1 : 1;
                });
                $promesas = new ArrayCollection(iterator_to_array($iterator));

                $promesasResult = new ArrayCollection();
                $promesa = new Doctrine_Model_Entities_PromesaJuicio();
                if ($pendienteDeCobro) {
                    foreach ($promesas as $promesa) {
                        if (!$promesa->getPendienteDeCobro()) {
                            $promesas->removeElement($promesa);
                        }
                    }
                }

                if ($usuarioAsignado != 'todos') {
                    foreach ($promesas as $promesa) {
                        if ($promesa->getJuicio()->getUsuarioACargo()) {
                            if ($promesa->getJuicio()->getUsuarioACargo()->getId() != $usuarioAsignado) {
                                $promesas->removeElement($promesa);
                            }
                        }
                    }
                }

                $cantidad_promesas = count($promesas);
            }
        }

        $usuarios = $this->usuarioDao->obtenerTodos();
        $this->view->usuarios = $usuarios;
        $this->view->usuarioAsignado = $usuarioAsignado;
        $this->view->pendienteDeCobro = $pendienteDeCobro;
        $this->view->cantidad_promesas = $cantidad_promesas;
        $this->view->promesas = $promesas;
    }

    public function exportarjuiciosexcelAction(){
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->getHelper('layout')->disableLayout();
        
        $juicios_ids = $this->getRequest()->getParam("ids", null);
        
        if ($juicios_ids):
            $juicios_ids = explode(',', $juicios_ids);
        else:
            $juicios_ids = array();
        endif;
        
        $juicios = new ArrayCollection();
        foreach ($juicios_ids as $id):
            if (!$id) continue;
            $unJuicio = $this->juicioDao->obtenerPorId($id);
            $juicios->add($unJuicio);
        endforeach;
        
        $style_header = array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => 'f8f988'), ), 'font' => array('bold' => true,));
        
        $objPHPExcel = new PHPExcel();
        /* propiedades */
        $objPHPExcel->getProperties()->setCreator("CREDYPHONE SA");
        $objPHPExcel->getProperties()->setTitle("CREDYPHONE SA - JUICIOS");
        $objPHPExcel->getProperties()->setDescription("EXPORTAR JUICIOS");
        $objPHPExcel->setActiveSheetIndex(0);
        
        $row = 1;
        $objPHPExcel->getActiveSheet()->getStyle("A{$row}:E{$row}")->applyFromArray($style_header);
        $objPHPExcel->getActiveSheet()->SetCellValue("A{$row}", 'INICIO')->getColumnDimension("A")->setAutoSize(true);
        $objPHPExcel->getActiveSheet()->SetCellValue("B{$row}", 'DNI')->getColumnDimension("B")->setAutoSize(true);
        $objPHPExcel->getActiveSheet()->SetCellValue("C{$row}", 'CLIENTE')->getColumnDimension("C")->setAutoSize(true);
        $objPHPExcel->getActiveSheet()->SetCellValue("D{$row}", 'JUZGADO')->getColumnDimension("D")->setAutoSize(true);
        $objPHPExcel->getActiveSheet()->SetCellValue("E{$row}", 'M.EMBARGO')->getColumnDimension("E")->setAutoSize(true);
        
        $juicio = new Doctrine_Model_Entities_Juicio();
        $cant = 1; $init_row = $row++;
        foreach ($juicios as $juicio):            
            $objPHPExcel->getActiveSheet()->setCellValue("A{$row}", $juicio->getFechaInicio()->format('d/m/Y'))->getColumnDimension("A")->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->setCellValue("B{$row}", $juicio->getCliente()->getNroDocumento())->getColumnDimension("B")->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->setCellValue("C{$row}", "{$juicio->getCliente()->getApellido()}, {$juicio->getCliente()->getNombres()}")->getColumnDimension("C")->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->setCellValue("D{$row}", $juicio->getJuzgado())->getColumnDimension("D")->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->setCellValue("E{$row}", $juicio->getMontoEmbargo())->getColumnDimension("E")->setAutoSize(true);
            $cant++; $row++;
        endforeach;
        
        $objPHPExcel->getActiveSheet()->setTitle('Juicios');
        
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); /* Excel2007 */
        
        ob_end_clean();

        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="ventas.xls"');
        header('Cache-Control: max-age=0');

        $objWriter->save('php://output');
        
    }
    
}
